using System.Collections.Generic;
using NHibernate;
using ProjetoControlePagamento.CamadaAcessoDados;
using ProjetoControlePagamento.Dados.Entidades;

namespace ProjetoControlePagamento.CamadaAcessoDadosNH
{
    
    public class RepositorioUsuario : IRepositorioUsuario
    {
        public Usuario Inserir(Usuario usuario)
        {
            GerenciadorBD.Instance.SessaoAtual().Save(usuario);
            return usuario;
        }

        public Usuario Atualizar(Usuario usuario)
        {
            Usuario tmpUsuario = ObterPorId(usuario.UsuarioId);

            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados

            GerenciadorBD.Instance.SessaoAtual().Update(tmpUsuario);
            return tmpUsuario;
        }

        public void Excluir(Usuario usuario)
        {
            GerenciadorBD.Instance.SessaoAtual().Delete(usuario);
        }

        public IList<Usuario> ObterTodos()
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Usuario));
            return criteria.List<Usuario>() as List<Usuario>;
        }

        public Usuario ObterPorId(int id)
        {
            return GerenciadorBD.Instance.SessaoAtual().Get<Usuario>(id);
        }
    }
}